package com.jlwl.houseservice.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.jlwl.houseservice.entity.Order;
import com.jlwl.houseservice.vo.OrderCreateVO;
import com.jlwl.houseservice.vo.OrderDetailVO;
import com.jlwl.houseservice.vo.OrderQueryVO;

/**
 * 订单Service接口
 */
public interface OrderService extends IService<Order> {

    /**
     * 创建订单
     * @param orderCreateVO 创建订单参数
     * @param userId 用户ID
     * @return 订单ID
     */
    String createOrder(OrderCreateVO orderCreateVO, Integer userId);

    /**
     * 分页查询订单列表
     * @param queryVO 查询条件
     * @param userId 用户ID
     * @return 分页结果
     */
    Page<Order> pageList(OrderQueryVO queryVO, Integer userId);

    /**
     * 获取订单详情
     * @param orderNo 订单编号
     * @param userId 用户ID
     * @return 订单详情
     */
    OrderDetailVO getOrderDetail(String orderNo, Integer userId);

    /**
     * 取消订单
     * @param orderNo 订单编号
     * @param userId 用户ID
     * @param reason 取消原因
     * @return 是否成功
     */
    boolean cancelOrder(String orderNo, Integer userId, String reason);

    /**
     * 完成订单
     * @param orderNo 订单编号
     * @param userId 用户ID
     * @return 是否成功
     */
    boolean completeOrder(String orderNo, Integer userId);

    /**
     * 管理员分页查询订单列表
     * @param queryVO 查询条件
     * @return 分页结果
     */
    Page<Order> adminPageList(OrderQueryVO queryVO);

    /**
     * 管理员获取订单详情
     * @param orderNo 订单编号
     * @return 订单详情
     */
    OrderDetailVO adminGetOrderDetail(String orderNo);

    /**
     * 管理员更新订单状态
     * @param orderNo 订单编号
     * @param status 状态
     * @return 是否成功
     */
    boolean adminUpdateOrderStatus(String orderNo, String status);

    /**
     * 管理员分配员工
     * @param orderNo 订单编号
     * @param employeeId 员工ID
     * @return 是否成功
     */
    boolean adminAssignEmployee(String orderNo, Integer employeeId);
    
    /**
     * 根据订单编号获取订单信息
     * @param orderNo 订单编号
     * @return 订单信息
     */
    Order getOrderByOrderNo(String orderNo);
} 